]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
messageTray: Remove the stackedNotification tracking complexity
authorJasper St. Pierre <jstpierre@mecheye.net>
Fri, 2 Aug 2013 04:18:55 +0000 (00:18 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Fri, 16 Aug 2013 01:52:59 +0000 (21:52 -0400)
We only have one signal left to track, but since it's destroy it
doesn't matter if it's disconnected or not since it will eventually
be GC'd.

js/ui/messageTray.js

index 5aee7c33c21218cde02c009f387f63a5fe73bd8f..5ae077161f1a6ab6c5359e4ea8407e5c70aeacbe 100644 (file)
@@ -1448,25 +1448,17 @@ const SummaryItem = new Lang.Class({
         if (this.notificationStack.get_n_children() > 0)
             return;
 
-        for (let i = 0; i < this.source.notifications.length; i++) {
-            this._appendNotificationToStack(this.source.notifications[i]);
-        }
-
+        this.source.notifications.forEach(Lang.bind(this, this._appendNotificationToStack));
         this.scrollTo(St.Side.BOTTOM);
     },
 
     doneShowingNotificationStack: function() {
-        for (let i = 0; i < this._stackedNotifications.length; i++) {
-            let stackedNotification = this._stackedNotifications[i];
-            let notification = stackedNotification.notification;
+        this.source.notifications.forEach(Lang.bind(this, function(notification) {
             notification.collapseCompleted();
-            notification.disconnect(stackedNotification.notificationDestroyedId);
-            if (notification.actor.get_parent() == this.notificationStack)
-                this.notificationStack.remove_actor(notification.actor);
             notification.setIconVisible(true);
             notification.enableScrolling(true);
-        }
-        this._stackedNotifications = [];
+            this.notificationStack.remove_actor(notification.actor);
+        }));
     },
 
     _notificationAddedToSource: function(source, notification) {
@@ -1474,17 +1466,21 @@ const SummaryItem = new Lang.Class({
             this._appendNotificationToStack(notification);
     },
 
+    _contentUpdated: function() {
+        this.source.notifications.forEach(function(notification, i) {
+            notification.setIconVisible(i == 0);
+        });
+
+        this.emit('content-updated');
+    },
+
     _appendNotificationToStack: function(notification) {
-        let stackedNotification = {};
-        stackedNotification.notification = notification;
-        stackedNotification.notificationDestroyedId = notification.connect('destroy', Lang.bind(this, this._notificationDestroyed));
-        this._stackedNotifications.push(stackedNotification);
+        notification.connect('destroy', Lang.bind(this, this._contentUpdated));
         if (!this.source.isChat)
             notification.enableScrolling(false);
-        if (this.notificationStack.get_n_children() > 0)
-            notification.setIconVisible(false);
-        this.notificationStack.add(notification.actor);
         notification.expand(false);
+        this.notificationStack.add(notification.actor);
+        this._contentUpdated();
     },
 
     // scrollTo:
@@ -1498,28 +1494,6 @@ const SummaryItem = new Lang.Class({
         else if (side == St.Side.BOTTOM)
             adjustment.value = adjustment.upper;
     },
-
-    _contentUpdated: function() {
-        this.emit('content-updated');
-    },
-
-    _notificationDestroyed: function(notification) {
-        for (let i = 0; i < this._stackedNotifications.length; i++) {
-            if (this._stackedNotifications[i].notification == notification) {
-                let stackedNotification = this._stackedNotifications[i];
-                notification.disconnect(stackedNotification.notificationDestroyedId);
-                this._stackedNotifications.splice(i, 1);
-                if (notification.actor.get_parent() == this.notificationStack)
-                    this.notificationStack.remove_actor(notification.actor);
-                this._contentUpdated();
-                break;
-            }
-        }
-
-        let firstNotification = this._stackedNotifications[0];
-        if (firstNotification)
-            firstNotification.notification.setIconVisible(true);
-    }
 });
 Signals.addSignalMethods(SummaryItem.prototype);